package com.zenithmind.document.pojo.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.*;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 文档分享更新DTO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "文档分享更新DTO")
public class DocumentShareUpdateDTO {

    /**
     * 分享标题
     */
    @Schema(description = "分享标题")
    @Size(max = 200, message = "分享标题长度不能超过200字符")
    private String shareTitle;

    /**
     * 分享描述
     */
    @Schema(description = "分享描述")
    private String shareDescription;

    /**
     * 分享类型（1-公开链接，2-密码链接，3-指定用户，4-指定群组）
     */
    @Schema(description = "分享类型（1-公开链接，2-密码链接，3-指定用户，4-指定群组）")
    @Min(value = 1, message = "分享类型值不能小于1")
    @Max(value = 4, message = "分享类型值不能大于4")
    private Integer shareType;

    /**
     * 分享密码
     */
    @Schema(description = "分享密码")
    @Size(max = 20, message = "分享密码长度不能超过20字符")
    private String sharePassword;

    /**
     * 权限类型（1-只读，2-下载，3-编辑，4-管理）
     */
    @Schema(description = "权限类型（1-只读，2-下载，3-编辑，4-管理）")
    @Min(value = 1, message = "权限类型值不能小于1")
    @Max(value = 4, message = "权限类型值不能大于4")
    private Integer permissionType;

    /**
     * 分享状态（0-禁用，1-启用，2-已过期）
     */
    @Schema(description = "分享状态（0-禁用，1-启用，2-已过期）")
    @Min(value = 0, message = "分享状态值不能小于0")
    @Max(value = 2, message = "分享状态值不能大于2")
    private Integer status;

    /**
     * 过期时间
     */
    @Schema(description = "过期时间")
    private LocalDateTime expireTime;

    /**
     * 最大访问次数
     */
    @Schema(description = "最大访问次数")
    @Min(value = 0, message = "最大访问次数不能为负数")
    private Integer maxAccessCount;

    /**
     * 最大下载次数
     */
    @Schema(description = "最大下载次数")
    @Min(value = 0, message = "最大下载次数不能为负数")
    private Integer maxDownloadCount;

    /**
     * 是否允许转发（0-否，1-是）
     */
    @Schema(description = "是否允许转发（0-否，1-是）")
    @Min(value = 0, message = "是否允许转发值只能是0或1")
    @Max(value = 1, message = "是否允许转发值只能是0或1")
    private Integer allowForward;

    /**
     * 是否需要登录（0-否，1-是）
     */
    @Schema(description = "是否需要登录（0-否，1-是）")
    @Min(value = 0, message = "是否需要登录值只能是0或1")
    @Max(value = 1, message = "是否需要登录值只能是0或1")
    private Integer requireLogin;

    /**
     * 是否水印保护（0-否，1-是）
     */
    @Schema(description = "是否水印保护（0-否，1-是）")
    @Min(value = 0, message = "是否水印保护值只能是0或1")
    @Max(value = 1, message = "是否水印保护值只能是0或1")
    private Integer watermarkProtection;

    /**
     * 分享给用户ID列表（分享类型为指定用户时使用）
     */
    @Schema(description = "分享给用户ID列表")
    private List<String> shareUserIds;

    /**
     * 分享给群组ID列表（分享类型为指定群组时使用）
     */
    @Schema(description = "分享给群组ID列表")
    private List<String> shareGroupIds;

    /**
     * 通知方式（1-站内信，2-邮件，3-短信，4-微信）
     */
    @Schema(description = "通知方式")
    private List<Integer> notificationTypes;

    /**
     * 自定义消息
     */
    @Schema(description = "自定义消息")
    private String customMessage;

    /**
     * 标签（JSON格式）
     */
    @Schema(description = "标签（JSON格式）")
    private String tags;

    /**
     * 备注
     */
    @Schema(description = "备注")
    private String remarks;
}
